package iscript.gameFramework.NetService 
{
	import flash.utils.ByteArray;
	import flash.utils.Endian;
	import iscript.gameFramework.NetService.util.BigInt;
	import iscript.gameFramework.NetService.util.BigIntCovertor;

	public class ByteArrayCollection  
	{
		
		public function ByteArrayCollection() 
		{
		  _data = new ByteArray();
		  _data.endian = Endian.LITTLE_ENDIAN;	
		}
		
		
		private var _data:ByteArray

		
		static public function get Empty():ByteArrayCollection{return  new ByteArrayCollection()}

		/**
		 * N位 字符串
		 * @param	msg
		 * @return
		 */
		public function toStr($msg:String,byteType:String="utf-8"):void
		{
            var  bytes:ByteArray = new ByteArray();
			     bytes.endian = Endian.LITTLE_ENDIAN;
				 bytes.writeMultiByte($msg, byteType);
				 
			     _data.writeShort(bytes.length);
				 _data.writeMultiByte($msg, byteType);
		}
		
		/**
		 * 1位   一个Byte值
		 * @param	$msg
		 */
		public function toByte($msg:int):void
		{			
			_data.writeByte($msg);
		}
		
		/**
		 * 4位  有符号32-bit整数值
		 * @param	$msg
		 */
		public function toInt($msg:int):void
		{				
			_data.writeInt($msg);
		}
		
		/**
		 * 2位 有符号的
		 * @param	$msg
		 */
		public function toWord($msg:int):void
		{
			_data.writeShort($msg);
		}
		
		/**
		 * 4位  无符号32-bit整数
		 * @param	$msg
		 */
		public function toDword($msg:int):void
		{
			_data.writeUnsignedInt($msg);	
		}
		
		/**
		 * 2位 有符号16-bit整数值.  
		 * @param	$msg
		 */
		public function toShort($msg:int):void
		{
			_data.writeShort($msg);

		}	
		
		/**
		 * 1位  一个Boolean值
		 * @param	$msg
		 */
		public function toBoolean($msg:Boolean):void
		{
			_data.writeBoolean($msg);
		}		
		
		/**
		 * 浮点数
		 * @param	msg
		 * @param	$decimal
		 * @return
		 */
		public  function toFloat($msg:Number):void
		{
			_data.writeFloat($msg);
		}
		
		
		public function toInt64($msg:BigInt):void
		{
			$msg = BigIntCovertor.Decimal2Binary($msg);
			_data.writeInt($msg.light);
			_data.writeInt($msg.high);

		}
		 
		public function get result():ByteArray { return _data; }	
		
	}

}